package main

import (
	"fmt"
	"math"
)

/*
Go语言提供了两种精度的浮点数，float32和float64。它们的算术规范由IEEE754浮点数国际标准定义，该浮点数规范被所有现代的CPU支持。
*/
func main() {
	fmt.Println("最大浮点值32", math.MaxFloat32)
	fmt.Println("最大浮点值64", math.MaxFloat64)

	// 直接使用小数写
	const e float64 = 2.71828
	for x := 0; x < 8; x++ {
		fmt.Printf("x = %d e^x = %8.3f\n", x, math.Exp(float64(x)))
	}

	// 特殊值处理
	var z float64
	fmt.Println("z:初始值", z)     // 0
	fmt.Println("z:负值", -z)     // -0
	fmt.Println("z:正无穷大", 1/z)  // +Inf，表示太大溢出的数字和除零
	fmt.Println("z:负无穷大", -1/z) // -Inf
	fmt.Println("z:无效数据", z/z)  // NaN,表示无效的除法操作结果0/0或Sqrt(-1)

	//判断是否为数字
	nan := math.NaN()
	fmt.Println(nan == nan, nan < nan, nan > nan, math.IsNaN(nan)) // "false false false true"
}
